package com.luntan.school.dao;

import com.luntan.school.dao.impl.PageImpl;
import com.luntan.school.service.Posts;

import java.util.List;
import java.util.Map;

public interface PostsDao {
    /**
     * 获取分类帖子列表
     * @param categoryId 分类编号
     * @return
     */
    List<Posts> getPostsByCategory(Integer categoryId);

    /**
     * 获取标签帖子列表
     * @param tagId 标签编号
     * @return
     */
    List<Posts> getPostsByTag(Integer tagId);

    /**
     * 获取置顶帖子（首页展示）
     * @param limit 限制数量
     * @return
     */
    List<Posts> getStickPosts(int limit);


    /**
     * 获取所有帖子（不分页）
     * @return
     */
    List<Posts> getAllPosts();

    /**
     * 增加帖子
     * @param posts
     */
    Integer addPosts(Posts posts);

    /**
     * 更新帖子
     * @param posts
     */
    void updatePosts(Posts posts);


    /**
     * 根据ID获取帖子
     * @param postsId
     * @return
     */
    Posts getPostsById(int postsId);

    /**
     * 获取热点帖子（24小时内发布或评论，前10条）
     * @return
     */
    List<Posts> getHotPosts();

    /**
     * 获取帖子的推荐帖子（根据帖子标签）
     * @param postsId
     * @return
     */
    List<Posts> getRecommendedPosts(int postsId);

    /**
     * 更新帖子点击计数（+1）
     * @param postsId
     */
    void updateClickCount(int postsId);


    /**
     * 按照分类统计帖子数
     * @return
     */
    List<Map<String, Object>> statPostsCountByCategory();

    /**
     * 按照标签统计帖子籹
     * @return
     */
    List<Map<String, Object>> statPostsCountByTag();


    /**
     * 按照日期统计帖子评论数
     * @return
     */
    List<Map<String, Object>> statPostsCommentCountByDate();


    /**
     * 按照用户统计帖子评论数
     * @return
     */
    List<Map<String, Object>> statPostsCommentCountByUser();

    /**
     * 分页查询帖子列表
     * @param pageNumer 当前分页
     * @param pageSize 分页大小
     * @param key 搜索关键(null或空字符串表示无关键字）
     * @return
     */
    PageImpl<Posts> getPagedPosts(int pageNumer, int pageSize, String key);
}
